{
    // 数组解构赋值
    let a,b,rest;
    [a,b] = [1,2];
    console.log(a,b)
}
{
    // 数组解构赋值
    let a,b,rest;
    [a,b,...rest] = [1,2,3,4,5];
    console.log(a,b,rest)
}
{
    // 字符串解构赋值
    let a,b,rest;
    ({a,b} = {a:1,b:2});
    console.log(a,b)
}
// 
// 变量交换
{
    let a = 1;
    let b = 2;
    [a,b] = [b,a];
    console.log('变量交换',a,b);
}
// 直接获取函数值
{
    function f(){
        return [1,2]
    }
    let a,b;
    [a,b] = f();
    console.log('直接获取函数值',a,b);
}
// 返回多个值的时候，只接收想要的值
{
    function f(){
        return [1,2,3,4,5]
    }
    let a,b,c;
    [a,,,b] = f();
    console.log('返回多个值的时候，只接收想要的值',a,b);
}
// 在不知道函数返回的数组的长度的时候，只关心其中一个，其余的返回一个数组
{
    function f(){
        return [1,2,3,4,5]
    }
    let a,b,c;
    [a,...b] = f();
    console.log('在不知道函数返回的数组的长度的时候，只关心其中一个，其余的返回一个数组',a,b);
}
// 
{
    let o ={p:42,q:true};
    let {p,q}=o;
    console.log(p,q)
}
{
    let {a=10,b=5} = {a:3};
    console.log(a,b)
}
// 嵌套的对象赋值
{
    let metaData={
        title:'abc',
        test:[{
            title:'test',
            desc:'description'
        }]
    }
    let {title:esTitle,test:[{title:cnTitle}]}=metaData;
    console.log('嵌套的对象赋值',esTitle,cnTitle)
}